﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace ApprovalFlow
{
    public interface IWorkflowModifier<TData, TStepBody> where TStepBody : IStepBody
    {
        //IStepBuilder<TData, ActionStepBody> StartWith(Action<IStepExecutionContext> body);

        //IStepBuilder<TData, TStep> StartWith<TStep>(Action<IStepBuilder<TData, TStep>> stepSetup = null) where TStep : IStepBody;

        //IStepBuilder<TData, InlineStepBody> StartWith(Func<IStepExecutionContext, ExecutionResult> body);

        ///// <summary>
        ///// 结束工作流并将工作流标记完成。
        ///// </summary>
        ///// <returns></returns>
        //IStepBuilder<TData, TStepBody> EndWorkflow();

        ///// <summary>
        ///// 指定工作流程内联的下一步(不推荐使用)
        ///// </summary>
        ///// <param name="body"></param>
        ///// <returns></returns>
        //IStepBuilder<TData, ActionStepBody> Then(Action<IStepExecutionContext> body);

        ///// <summary>
        ///// 指定工作流程内联的下一步(不推荐使用)
        ///// </summary>
        ///// <param name="body"></param>
        ///// <returns></returns>
        //IStepBuilder<TData, InlineStepBody> Then(Func<IStepExecutionContext, ExecutionResult> body);

        ///// <summary>
        ///// 指定工作流程内联的下一步(不推荐使用)
        ///// </summary>
        ///// <typeparam name="TStep"></typeparam>
        ///// <returns></returns>
        //IStepBuilder<TData, TStep> Then<TStep>(Action<IStepBuilder<TData, TStep>> stepSetup = null) where TStep : IStepBody;

        ///// <summary>
        ///// 判断节点
        ///// </summary>
        ///// <typeparam name="TStep"></typeparam>
        ///// <returns></returns>
        //IfStepBuilder<TData> If(Expression<Func<TData, bool>> condition, Func<IStepExecutionContext, ExecutionResult> trueStep = null);

        ///// <summary>
        ///// 其他(常用于：加签)
        ///// </summary>
        ///// <returns></returns>
        //IApprovalBuilder<TData> Other<StepBody>() where StepBody : ApprovalStepBody;

        ///// <summary>
        ///// 审批
        ///// </summary>
        ///// <returns></returns>
        //IApprovalBuilder<TData> Approval<StepBody>(ApprovalStepOptions options) where StepBody : ApprovalStepBody;

        ///// <summary>
        ///// 审批
        ///// </summary>
        ///// <returns></returns>
        //IApprovalBuilder<TData> Approval(string description, ApprovalStepOptions options);

        ///// <summary>
        ///// 抄送
        ///// </summary>
        ///// <returns></returns>
        //IWorkflowBuilder<TData> CC(Func<IUser, bool> func);

        ///// <summary>
        ///// 办理
        ///// </summary>
        ///// <returns></returns>
        //IWorkflowBuilder<TData> Transaction(string description);

        ///// <summary>
        ///// 连接器
        ///// </summary>
        ///// <returns></returns>
        //IWorkflowBuilder<TData> Connector<StepBody>();
    }
}
